<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

class CreateOrderBasesTable extends Migration
{
    /**
     * Run the migrations.
     * 待支付、待发货、待收货、已完成、已取消
     * 退换/售后(类型:退款/退货/换货;状态:申请中、处理中、已完成)
     * @return void
     */
    public function up()
    {
        // 微信支付的JSAPI支付和H5支付是两种不同的支付方式，其主要区别如下：
        // 1. 使用场景不同：JSAPI支付适用于在微信公众号或小程序中进行支付，而H5支付则适用于在非微信环境下的网页中进行支付。
        // 2. 支付方式不同：JSAPI支付是通过微信公众号或小程序内置的支付功能进行支付，用户可以直接使用微信支付完成支付，而H5支付则是通过微信支付的网页版支付功能进行支付，用户需要在微信外部的浏览器中打开支付页面进行支付。
        // 3. 支付流程不同：JSAPI支付的支付流程相对简单，用户在微信公众号或小程序中选择商品并确认支付后，直接跳转到微信支付页面完成支付；而H5支付的支付流程相对复杂，用户需要在微信外部的浏览器中打开支付页面，输入支付信息并确认支付，然后跳转回商户网站进行支付结果的回调。
        // 4. 支付安全性不同：JSAPI支付的安全性相对较高，因为用户在支付过程中不需要离开微信环境，支付信息受到微信的保护；而H5支付的安全性相对较低，因为用户需要在微信外部的浏览器中输入支付信息，存在信息被窃取的风险。
        if (!Schema::hasTable('order_bases')) {
            Schema::create('order_bases', function (Blueprint $table) {
                $table->id();
                $table->integer('uid')->comment('用户id');
                // $table->integer('b_id')->comment('买家id');
                // $table->integer('s_id')->comment('卖家id');
                $table->string('order_num')->comment('订单号');
                $table->enum('status', ['wait', 'success', 'cancel'])->default('wait')->comment('订单状态,wait:进行中,success:订单完结,cancel:订单取消');
                // $table->enum('status', ['unpaid', 'unshipped', 'unreceived', 'success', 'cancel'])->default('unpaid')->comment('订单状态: 待支付、待发货、待收货、已完成、已取消');
                $table->decimal('total_price', 14, 2)->comment('订单总价,单位:分');
                $table->integer('total_num')->comment('订单商品总数');
                $table->integer('total_weight')->comment('订单商品总重量,单位:克');
                $table->integer('discount_price')->default(0)->comment('订单优惠金额,单位:分');
                $table->string('discount_code')->nullable()->comment('订单优惠码');
                $table->tinyInteger('discount_type')->default(0)->comment('订单优惠方式:0:无优惠,1:满减,2:折扣');
                $table->integer('express_price')->default(0)->comment('订单运费总金额,单位:分');
                $table->decimal('pay_price', 14, 2)->comment('订单实付金额,单位:分');
                $table->string('pay_type')->default('offline')->comment('支付方式:wechat微信,alipay支付宝,offline线下');
                $table->enum('pay_status', ['yes', 'no'])->default('no')->comment('支付状态,no:未支付,yes:已支付');
                $table->string('pay_time')->nullable()->comment('支付时间');
                $table->timestamp('delivery_time')->nullable()->comment('发货时间');
                $table->timestamp('receive_time')->nullable()->comment('收货时间');
                $table->timestamp('completed_time')->nullable()->comment('完成时间');
                $table->timestamp('cancel_time')->nullable()->comment('取消时间');
                $table->string('cancel_reason')->nullable()->comment('取消原因');
                $table->string('remark')->nullable()->comment('订单备注');
                $table->enum('after_saled', ['yes', 'no'])->default('no')->comment('售后状态,no:未售后,yes:已售后');
                $table->tinyInteger('invoice_status')->default(0)->comment('开票状态:0:未申请,1:已申请,2:已开票,3拒绝申请');
                $table->softDeletes();
                $table->timestamps();
                $table->index(['uid', 'order_num']);
            });
            DB::statement("ALTER TABLE `order_bases` comment '订单基本信息表'");
        }
        
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('order_bases');
    }
}
